ArchiveReader使用手册

1. 功能描述

ArchiveReader是一个独立的二进制,其主要功能包括两个方面:

  1. 将hyperchain上归档的数据重新restore到线上
  2. 提供状态证明功能

2. 使用方式

2.1 归档数据restore

在部署方面, 相比于hyperchain,ArchvieReader二进制只需要一份配置文件即可启动。而配置文件可以完全复用hyperchain的配置。

在使用方面, ArchiveReader的核心功能为线下数据restore和通过api接口查询restore到线上的数据,因此使用ArchiveReader需要首先准备线下数据,线下数据的来源即为hyperchain上归档以后的线下目录下的内容,具体的,一份合法的线下数据内容如下图所示:

image0

上图为一个hyperchain-2.7.0归档过3次的节点的data/archive目录下的数据,其中的红色框圈起来的数据,是需要手动拷贝到ArchvieReader的namespaces/global/data/archive目录下的数据。即一个合法的ArchiveReader节点在启动前应该准备好如下的目录结构:

image1

至此,ArchiveReader的线下数据准备完成,下面可以进行restore操作:首先 启动ArchiveReader,然后可以看到其namespaces/global/data目录下的结构为:

image2

archive目录下新增了archive.record文件和genesis.meta文件。public目录下的结构和普通的vp节点的public目录下结构相同。

接下来, 用户就可以通过命令进行restore操作了 ,ArchiveReader上提供了restore的API,curl命令为:

curl localhost:8081 --data '[{"jsonrpc": "2.0", "id": 0, "method": "archive_restore", "params": ["0xf48816b2aaac6461be86b6256bf438de", true], "namespace": "global"}]'

接口说明:

接口名称 archive_restore    
参数说明 名称 类型 含义
  filterID string 预期恢 复的区块范 围对应的sn apshot标识
  shouldSync bool 是否同 步的等待返 回(true为 同步等待)
返回值 如果第二个参数true, 则接口返回true即表示restore完成;    
  如果为false,则需要通过archiv e_queryArchive接口获得结果;查询请 求为:如果成功,可以看到如下结果:    

当归档成功后,ArchiveReader的线上数据库中会有这一段数据,如图所示:

image3

此时用户可以使用ArchiveReader暴露的读取数据的接口进行数据访问。

restore的使用限制条件!!!

  1. 整体上,ArchiveReader要求按照区块号 从小到大 的顺序 连续 进行restore,比如线下有多份归档数据(分别对应:0-15,15-20,20-40),那么用户需要按照先0-15,再15-20,最后20-40的顺序进行restore。过程中 不能出现 区块号的断档。
  2. 如果当前ArchiveReader没有任何数据,ArchiveReader并不要求一定要从0号开始restore,即上述的场景下,用户可以按照先15-20,再20-40的顺序进行restore,这样也是合法的。但是后续 不再允许 restore[0-15]了。

2.2 状态证明

参考《状态证明使用手册》

2.3 ArchiveReader支持接口

接口类型 接口名称 接口描述
交易接口 tx_getTransactionByHash 根据交 易哈希值查询交易详情
  tx_ getTransactionByBlockHashAndIndex 根据区块哈 希及索引查询交易详情
  tx_ge tTransactionByBlockNumberAndIndex 根据区块号及 索引信息查询交易详情
  tx_getTransactionsCount 根据区块号及 索引信息查询交易详情
  tx_getTxAvgTimeByBlockNumber 查询指定区 块中交易平均处理时间
  tx_getTransactionReceipt 查询指定交易回执信息
  tx_getBlockTransactionCountByHash 根据区块 哈希查询区块交易数量
  tx _getBlockTransactionCountByNumber 根据区 块号查询区块交易数量
  tx_getTransactionsVersion 查询 平台当前的交易版本号
  tx_getTransactionsWithLimit 查询指定区块区间 的交易(可用于分页)
  tx_getTransactionsByTimeWithLimit 查询指定时间区间内 的交易(可用于分页)
  tx_getTransactionsByExtraID 查询 extraId为指定值的交易
  tx_getTransactionsByFilter 查 询符合过滤条件的交易
  t x_getInvalidTransactionsWithLimit 查询指定区块区 间的非法交易(可分页)
  tx _getInvalidTransactionByBlockHash 查询非法交易列表(by block hash)
  tx_g etInvalidTransactionByBlockNumber 查询非法交易列表(by block number)
  tx_getInvalidTransactionsCount 查 询链上所有非法交易量
区块接口 block_latestBlock 获取最新区块
  block_getBlockByHash 根据区块 的哈希值返回区块信息
  block_getBlockByNumber 根 据区块号返回区块信息
  bloc k_getAvgGenerateTimeByBlockNumber 根据区块区间计算 出区块的平均生成时间
  block_getGenesisBlock 查询创世区块号
  block_getChainHeight 查询最新区块号
  block_getBlocksWithLimit 查询指定区块区间的所 有区块(可用于分页)